#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
//int main()
//{
//    int a, b, c, d;
//    float result;
//    scanf("%d%d%d%d", &a, &b, &c, &d);
//    result = 1.0*(a * c + b * d) / (a + b);
//    printf("%.1f\n", result);
//    if (result >= 60)
//    {
//        printf("pass");
//    }
//    else
//    {
//        printf("fail");
//    }
//    return 0;
//}

//int main()
//{
//	int a, b;
//	int num1, num2;
//	scanf("%d%d", &a, &b);
//	int i ;
//	if (a < b)
//	{
//		i=a
//		while (i <= a)
//		{
//			num1 = a % i;
//			num2 = b % i;
//			if (num1==0&&num2==0)
//				break;
//			else
//				i--;
//		}
//		if (i == a)
//		{
//			printf("1");
//		}
//		else
//			printf("%d", i);
//		
//	}
//	if (a > b)
//	{
//		while (i <= b)
//		{
//			num1 = b % i;
//			num2 = a % i;
//			if (num1 == 0 && num2 == 0)
//				break;
//			else
//				i++;
//		}
//		if (i == b)
//		{
//			printf("1");
//		}
//		else
//			printf("%d", i);
//	}
//	return 0;
//}
//
//int main()
//{
//	int n1, n2;
//	scanf("%d%d", &n1, &n2);
//	int n = n1 > n2 ? n2 : n1;
//	int j;
//	int max = 0;
//	for (j = 1; j <= n; j++)
//	{
//		if (n1%j==0 && n2%j==0)
//		{
//			if (max < j)
//			{
//				max = j;
//			}
//		}
//	}
//	printf("%d\n", max);
//	printf("%d", n1 * n2 / max);
//
//	return 0;
//}

//int main()
//{
//    int m, n;
//    scanf("%d %d", &m, &n);
//    int j,a;
//    int max = 0;
//    if (m <= n)
//        a = m;
//    else
//        a = n;
//    for (j = 1; j <= a; j++)
//    {
//        if (m % j == 0 && n % j == 0)
//        {
//            if (max < j)
//                max = j;
//        }
//    }
//    printf("%d %d", max, m * n / max);
//
//    return 0;
//}

//int main()
//{
//    int m, n;
//    scanf("%d %d", &m, &n);
//    int a;
//    int j;
//    int max = 0;
//    if (m <= n)
//        a = m;
//    else
//        a = n;
//    for (j = 1; j <= a; j++)
//    {
//        if (m % j == 0 && n % j == 0)
//        {
//            if (max < j)
//                max = j;
//        }
//    }
//    printf("%d %d", max, m * n / max);
//
//    return 0;
//}

int max(int x, int y)
{
    if (x >= y)
        return x;
    else
        return y;
}
int min(int x, int y)
{
    if (x <= y)
        return x;
    else
        return y;
}
int main()
{
    int m, n, r, lcm, Max, Min;
    scanf("%d%d", &m, &n);
    Max = max(m, n);
    Min = min(m, n);
    do
    {
        r = Max % Min;
        Max = Min;
        Min = r;
    } while (r != 0);
    lcm = m / Max * n;
    printf("%d %d", Max, lcm);
    return 0;
}